package org.shop.controller;

import org.shop.util.FileUploadUtil;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;

/**
 * 编写 Servlet，基于上传工具类实现文件上传
 * <p>
 * 万能键 ：alt + enter
 * <p>
 * 第一：继承 HttpServlet
 * 第二：重写 doXxx 方法
 * 第三：编辑 doXxx 方法，实现具体的业务逻辑功能 - 文件上传
 * 1.开启上传功能 - @MultipartConfig
 * 2.实例化 Part 对象 - 基于 file 表单控件
 * 3.上传文件 - 调用 Part 对象的 write 方法
 * 第四：定义访问路径
 */
@WebServlet("/upload4Util.do")
@MultipartConfig
public class Upload4UtilServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        // 第一：实例化 Part 对象 - 通过 file 表单控件中，name 属性实例化
        Part part = req.getPart("attach");
        // 第二：实例化上传工具类对象
        FileUploadUtil fileUploadUtil = new FileUploadUtil(1*1024*1024,"doc,docx,txt,xls,xlsx");
        // 第三：上传文件
        String realPath = req.getServletContext().getRealPath("/upload/");
        String filename = fileUploadUtil.upload(part, realPath);
        // 第四：把文件名存在到数据库 - DAO操作
        req.setAttribute("filename",filename);
        req.getRequestDispatcher("upload-success.jsp").forward(req,resp);
    }
}
